// 引入校验规则
import Schema from "validate"
// 添加校验规则
const roomInfo = new Schema({
  // 楼栋
  building: {
    type: String, // 类型
    required: true, // 非空
    message: '楼栋不能为空', // 提示信息
  },
  // 房号
  room: {
    type: String, // 类型
    required: true, // 非空
    message: '房号不能为空', // 提示信息
  },
  // 姓名
  name: {
    type: String, // 类型
    match: /^[\u4e00-\u9fa5]{2,6}$/, // 中文正则
    message: '姓名为2-6为中文字符', // 提示信息
  },
  // 手机号码
  mobile: {
    type: String, // 类型
    match: /^1[3-9]\d{9}$/, // 手机号码
    message: '手机号码不合法', // 提示信息
  },
  // 身份证正面
  idcardFrontUrl: {
    type: String, // 类型
    required: true, // 非空
    message: '身份证正面不能为空', // 提示信息
  },
  // 身份证背面
  idcardBackUrl: {
    type: String, // 类型
    required: true, // 非空
    message: '身份证背面不能为空', // 提示信息
  },
},
  { strip: false }//解决验证对象后 数据属性的丢失问题
)

Page({
  data: {
    // 楼栋
    building: '',
    /** * 业主性别0女1男*/
    gender: 1,
    /** * 身份证背面*/
    idcardBackUrl: '',
    /** * 身份证正面*/
    idcardFrontUrl: '',
    /** * 业主电话*/
    mobile: '',
    /** * 业主姓名*/
    name: '',
    /** * 小区信息*/
    point: '',
    /** * 小区房间信息*/
    room: '',
  },
  async onLoad({ point, building, room, id }) {
    if (id) {
      // console.log('编辑', id);
      wx.setNavigationBarTitle({ title: '编辑房屋信息' })
      // 编辑 调接口获取数据 渲染页面
      const res = await wx.http({
        url: '/room/' + id
      })
      // console.log(76, res);
      // 解构赋值
      const { status, ...data } = res.data
      // 要分别设置
      this.setData(data)
    } else {
      // console.log(point, building, room);
      wx.setNavigationBarTitle({ title: '添加房屋信息' })
      this.setData({
        point,
        building,
        room
      })
    }
  },
  // 上传身份证图片
  async onChooseMedia(ev) {
    const res = await wx.chooseMedia({
      count: 1,
      mediaType: ['image']
    })
    // console.log(res);
    // 获取图片的临时地址
    const { tempFilePath } = res.tempFiles[0]
    // console.log(tempFilePath);
    // 将图片上传到服务器
    wx.uploadFile({
      url: wx.http.baseURL + '/upload',
      filePath: tempFilePath,
      name: 'file',
      header: {
        Authorization: `Bearer ${getApp().token}`
      },
      success: (res) => {
        // console.log("成功", res);
        // 进行数据转化 得到的是JSON格式
        const data = JSON.parse(res.data);
        // console.log(data.data.url);
        const type = ev.mark.type
        // console.log(type);
        this.setData({
          [type]: data.data.url
        })
      },
      fail: (err) => {
        console.log("失败", err);
      }
    })
  },
  // 删除身份证图片
  removePicture(ev) {
    const type = ev.mark.type
    this.setData({
      [type]: ""
    })
  },
  // 提交审核
  async onSubmit() {
    /* 
    1.获取表单数据
    2.进行表单校验
    3.调用接口 传送数据
    */
    //  获取数据
    const { id, building, gender, idcardBackUrl, idcardFrontUrl, room, mobile, name, point } = this.data
    // 定义对象
    const params = { id, building, gender, idcardBackUrl, idcardFrontUrl, room, mobile, name, point }
    // 进行校验
    const errors = roomInfo.validate(params)
    if (errors.length) {
      wx.utils.toast(errors[0].message)
      return
    }
    // 判断id是否为undefined 如果是就是 新增界面 删除id属性
    if (params.id === undefined) {
      delete params.id
    }
    // 调用接口
    const res = await wx.http({
      url: '/room',
      method: 'post',
      data: params
    })
    // console.log(res);
    if (res.code !== 10000) {
      return wx.utils.toast(res.message)
    }
    wx.showToast({ title: '操作成功' })
    // 跳转页面
    // 以为很多地方都会使用到 页面打开超过限制的情况 可以封装一个函数直接传地址调用即可
    setTimeout(() => {
      wx.navigateTo({
        url: '/house_pkg/pages/list/index',
        // 因为小程序最多打开十个页面 所以在页面超出后就不能进行跳转 所以在失败的时候换一种跳转方式
        fail(err) {
          // console.log(err);
          wx.redirectTo({
            url: '/house_pkg/pages/list/index',
          })
        }
      })
    }, 1500)
  }
})

